#ifndef CUBE_SCENE_H_
#define CUBE_SCENE_H_

class Actor;
class Camera;
class Model;
class UI;

class Scene
{
public :

	typedef std::list< Actor* >				ActorList;
	typedef ActorList::iterator				ActorListIter;
	typedef std::map< std::string, UI* >	UIList;
	typedef UIList::iterator				UIListIter;

	Scene();
	~Scene();

	void						AddActor( Actor* pActor );
	void						AddUI( const std::string& name, UI* pUI );
	Actor*						FindActor( const std::string& actorName );
	UI*							FindUI( const std::string& uiName );

	void						DeferredRendering();
	void						DrawScene( float time );
	void						FowardRendering();

	ActorList&					GetActorList(){ return _actorList; }
	Camera*						GetViewCamera(){ return _pCamera; }

	void						SetViewCamera( Camera* camera ){ _pCamera = camera; }

private :
	ActorList					_actorList;
	bool						_isDeferredRendering;
	//bool						_isInferredRendering;
	bool						_isSceneReadyToRender;
	//bool						_isUsingHDR;
	bool						_isUsingSSAO;
	//bool						_isUsingSSDO;
	Camera*						_pCamera;
	UIList						_uiList;
};

#endif